package com.hilinos.common.common;


import com.hilinos.common.entity.RespVo;

/**
 * 错误返回码
 *
 * @author qhl
 */
public enum ReturnCode {
    ///////////////////////////默认错误////////////////////////
    /**
     * 默认成功
     */
    SUCCESS(1, "", "成功"),
    /**
     * 默认失败
     */
    FAIL(2, "执行失败", "执行失败，请稍后重试"),

    /////////////////////////////////基础////////////////////////////
    NORMAL_PARAM_TYPE_ERROR(4001, "参数错误", "请检查参数类型"),
    NORMAL_PARAM_LOST_ERROR(4002, "缺少参数", "请确定必要参数已填写"),
    NORMAL_SYSTEM_ERROR(4003, "系统异常", "系统异常，请稍后重试"),
    NORMAL_NOT_FOUND(4004, "接口不存在", "请检查接口地址是否正确"),
    NORMAL_REQUEST_LIMIT(4005, "接口请求频率超过限制", "你的接口请求频率已超过限制，请稍后再试或提升接口访问频率限制"),
    NORMAL_REQUEST_NOT_SUPPORTED(4006, "接口不支持该请求方式", "接口不支持该请求方式"),
    NORMAL_LOGGED(4006, "账号已登录", "账号已登录"),

    ////////////////////////////////////权限///////////////////////////////////
    AUTH_ERROR(4101, "权限认证失败", "权限认证失败"),
    AUTH_APPID_USER_ERROR(4102, "无权发送到该用户", "无权发送到该用户"),
    AUTH_APPID_GROUP_ERROR(4103, "无权发送到该组", "无权发送到该组"),
    AUTH_TIME_MATCHING(4104, "时间验证失败", "请检查服务器时间"),
    AUTH_ACCOUNT_PASSWORD_ERROR(4105, "账号或密码错误", "账号或密码错误"),
    AUTH_CAPTCHA_ERROR(4106, "验证码错误", "验证码错误"),
    AUTH_USER_NOT_EXIST(4107, "用户不存在", "用户不存在"),
    AUTH_NO_EXECUTE(4108, "没有对该用户或群组的操作权限", "没有对该用户或群组的操作权限"),
    AUTH_NO_VISIT_API(4109, "你无权访问该接口", "你无权访问该接口"),
    AUTH_MULTI_USER(4110, "查询到多个用户", "查询到多个用户，请先选择机构"),
    AUTH_NO_OPERATOR(4111, "无操作权限", "你无权执行该操作"),
    AUTH_NO_OPERATOR_APPID(4111, "无操作权限", "你该appid的操作操作权限"),
    AUTH_LICENSE_EXPIRE(4112, "license过期", "license过期"),
    AUTH_LICENSE_ERROR(4112, "license非法", "license非法"),

    ////////////////////////////////////群组//////////////////////////////////
    GROUP_NOT_EXIST(4202, "群组不存在", "群组不存在，请先创建"),
    GROUP_NOT_VALID(4203, "群组不可用", "群组不可用，请先启用"),
    GROUP_NO_USER(4204, "群组内无任何成员", "群组内无任何成员"),

    ////////////////////////////////////数据/////////////////////////////////////
    DATA_NOT_EXIST(4301, "数据不存在", "数据不存在"),
    DATA_EXIST(4301, "数据已存在", "数据已存在"),
    /**
     * 比如机构被停用、任务状态不对等
     */
    DATA_INVALID(4301, "数据无效", "数据无效"),

    ////////////////////////////////////异步处理//////////////////////////////////
    ASYNC_DEALING(5001, "", "服务器已经接受该请求，正在处理中，请等待结果通知"),

    SERVER_ERROR_OFFLINE(52001, "服务不在线", "服务不在线");

    /**
     * 返回的状态码
     */
    private final int code;
    /**
     * 状态描述
     */
    private final String msg;

    /**
     * 错误描述
     */
    private final String error;


    ReturnCode(int code, String error, String msg) {
        this.code = code;
        this.msg = msg;
        this.error = error;
    }

    public <T> RespVo<T> resp() {
        return respMsg(msg);
    }

    public <T> RespVo<T> respData(T data) {
        return respDataMsg(msg, data);
    }

    public <T> RespVo<T> respMsg(String msg) {
        return respDataMsg(msg, null);
    }

    public <T> RespVo<T> respDataMsg(String msg, T data) {
        return respAll(code, msg, data, error);
    }

    public <T> RespVo<T> respMsgError(String msg, String error) {
        return respDataMsgError(msg, null, error);
    }

    public <T> RespVo<T> respDataMsgError(String msg, T data, String error) {
        return respAll(code, msg, data, error);
    }

    public <T> RespVo<T> respAll(int code, String msg, T data, String error) {
        return RespVo.get(code, msg, data, error);
    }

}
